from openpyxl import Workbook, load_workbook
import os

def create_excel(filename=r"C:\netlinux\user_data.xlsx"):
    """创建新的Excel文件并允许用户自定义表头"""
    # 确保目标目录存在
    directory = os.path.dirname(filename)
    if not os.path.exists(directory):
        try:
            os.makedirs(directory)
            print(f"📂 目录 '{directory}' 创建成功！")
        except Exception as e:
            print(f"❌ 创建目录 '{directory}' 失败: {str(e)}")
            return False
    
    try:
        wb = Workbook()
        ws = wb.active
        ws.title = "用户数据"
        
        # 获取用户自定义列名
        print("\n📝 请设置表格列名（用逗号分隔，例如：姓名,年龄,城市）：")
        header_input = input("列名: ").strip()
        
        # 处理用户输入
        if header_input:
            headers = ["ID"] + [col.strip() for col in header_input.split(",")]
        else:
            # 默认列名
            headers = ["ID", "姓名", "年龄", "城市"]
            print("⚠️ 使用默认列名：ID, 姓名, 年龄, 城市")
        
        # 设置表头
        ws.append(headers)
        wb.save(filename)
        print(f"\n✅ Excel文件 '{filename}' 创建成功！")
        print(f"  表头: {', '.join(headers[1:])}")
        return True
    except Exception as e:
        print(f"\n❌ 创建文件失败: {str(e)}")
        return False

def add_data(filename=r"C:\netlinux\user_data.xlsx"):
    """向Excel添加数据"""
    try:
        if not os.path.exists(filename):
            print(f"❌ 文件 {filename} 不存在，请先创建文件")
            return False
            
        wb = load_workbook(filename)
        ws = wb.active
        
        # 获取表头（跳过ID列）
        headers = [cell.value for cell in ws[1]][1:]
        
        print(f"\n📝 请输入新数据（表头: {', '.join(headers)}）：")
        
        # 根据表头获取用户输入
        data_values = []
        for header in headers:
            value = input(f"{header}: ")
            # 尝试转换为数字（如果是数值型字段）
            try:
                data_values.append(float(value) if '.' in value else int(value))
            except ValueError:
                data_values.append(value)
        
        # 生成新ID（当前最大ID+1）
        existing_ids = []
# 明确获取单个值而非元组
        for cell_value, in ws.iter_rows(min_row=2, max_col=1, values_only=True):  # 注意逗号
            if cell_value is not None:

                existing_ids.append(cell_value)  # 存储整数而非元组
        
        # 智能生成新ID
        new_id = max(existing_ids) + 1 if existing_ids else 1
        # =====================
        
        # 添加数据行（ID + 用户输入的数据）
        ws.append([new_id] + data_values)
        wb.save(filename)
        
        # 显示添加结果
        print(f"\n✅ 数据添加成功！ID: {new_id}")
        data_info = [f"{header}: {value}" for header, value in zip(headers, data_values)]
        print("  详细信息: " + ", ".join(data_info))
        return True
        
    except FileNotFoundError:
        print(f"❌ 文件 {filename} 不存在")
        return False
    except ValueError:
        print("❌ 数值输入格式错误！")
        return False
    except Exception as e:
        print(f"❌ 添加数据失败: {str(e)}")
        return False

def delete_data(filename=r"C:\netlinux\user_data.xlsx"):
    """删除指定ID的数据"""
    try:
        if not os.path.exists(filename):
            print(f"❌ 文件 {filename} 不存在")
            return False
            
        wb = load_workbook(filename)
        ws = wb.active
        
        display_data(filename)  # 显示当前数据
        
        target_id = int(input("\n🗑️ 请输入要删除的ID: "))
        deleted = False
        
        # 遍历查找目标ID
        for row_idx in range(2, ws.max_row + 1):
            if ws.cell(row=row_idx, column=1).value == target_id:
                # 获取被删除行的数据用于显示
                deleted_data = [cell.value for cell in ws[row_idx]][1:]
                headers = [cell.value for cell in ws[1]][1:]
                
                ws.delete_rows(row_idx)
                wb.save(filename)
                
                # 显示删除的详细信息
                print(f"✅ ID {target_id} 已删除")
                data_info = [f"{header}: {value}" for header, value in zip(headers, deleted_data)]
                print("  删除数据: " + ", ".join(data_info))
                deleted = True
                break
        
        if not deleted:
            print(f"❌ 未找到ID {target_id}")
        return deleted
        
    except FileNotFoundError:
        print(f"❌ 文件 {filename} 不存在")
        return False
    except ValueError:
        print("❌ 请输入有效的数字ID")
        return False

def display_data(filename=r"C:\netlinux\user_data.xlsx"):
    """显示所有数据"""
    try:
        if not os.path.exists(filename):
            print(f"❌ 文件 {filename} 不存在")
            return False
            
        wb = load_workbook(filename)
        ws = wb.active
        
        # 获取表头
        headers = [cell.value for cell in ws[1]]
        
        print("\n📊 当前数据：")
        # 动态计算分隔线长度
        separator = "-" * (len(headers) * 12 + 5)
        print(separator)
        
        # 打印表头
        header_line = "| " + " | ".join(f"{header:<10}" for header in headers) + " |"
        print(header_line)
        print(separator)
        
        # 打印数据行
        record_count = 0
        for row in ws.iter_rows(min_row=2, values_only=True):
            if any(row):  # 跳过空行
                data_line = "| " + " | ".join(f"{str(value):<10}" for value in row) + " |"
                print(data_line)
                record_count += 1
        
        print(separator)
        print(f"总计: {record_count} 条记录\n")
        return True
        
    except FileNotFoundError:
        print(f"❌ 文件 {filename} 不存在")
        return False

# 主程序
def main():
    filename = r"C:\netlinux\user_data.xlsx"  # 自定义文件路径
    
    while True:
        print("\n" + "=" * 50)
        print("📊 Excel 数据管理系统 (支持自定义表头)")
        print("=" * 50)
        print("1. 初始化表格（自定义列名）")
        print("2. 添加数据")
        print("3. 删除数据")
        print("4. 显示数据")
        print("5. 退出系统")
        print("=" * 50)
        
        choice = input("请选择操作 (1-5): ")
        
        if choice == "1":
            create_excel(filename)
        elif choice == "2":
            add_data(filename)
        elif choice == "3":
            delete_data(filename)
        elif choice == "4":
            display_data(filename)
        elif choice == "5":
            print("\n👋 感谢使用，再见！")
            break
        else:
            print("❌ 无效选择，请重新输入")

if __name__ == "__main__":
    main()
